package com.coderman.common.starter.idempotent.annotations;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 幂等注解
 * 功能1：防止重复提交
 * 功能2：幂等
 * 功能3：锁
 * @author fcs
 * key: projectName_prefixKey_fieldArr[i]
 * value:fieldArr[i]
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisLock {

    /**
     * key前缀--功能code，自定义
     * 默认Constant.value_prefixKey
     * @return
     */
    String prefixKey() default "";

    /**
     * 功能类型
     * 0:防止重复提交
     * 1:幂等
     * 2:锁
     * 3:唯一性校验
     * @return
     */
    int funcType() default 0;

    /**
     * 是否需要持久化
     * 持久化则在业务库中新建表
     * 请求参数json,响应json,请求key,
     * @return
     */
    boolean persisit() default false;

    /**
     * 超时时间配置
     * 单位毫秒，默认两百ms
     *
     * @return
     */
    int timeout() default 200;

    /**
     * 要锁的属性名称
     * @return
     * 优先从属性列表中找，然后从对象中找
     */
    String  [] fieldArr() default ("");

    /**
     * 回调服务bean的接口
     * @return
     */
    String uniqCallBackBeanService() default ("");

}
